/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package API_Db;

import domain.Categorie;
import domain.Image;
import domain.Observer.I_Observer;
import domain.Observer.Seance;
import domain.Produit;
import domain.Utilisateur;
import java.util.List;

/**
 *
 * @author Damador
 */
public interface IAPI_Db_Seance {

    /**
     * Permet d inserer une seance dans la base de donnees
     * @param seance
     * @return 
     */
    public int creerSeanceDB(Seance seance) throws Exception;

    /**
     * Permet de lister les seances de la base de donnees
     * @param condition
     * @param nbSeance
     * @return 
     */
    public List<Seance> listerSeanceDB(String condition, int nbSeance, int numPage) throws Exception;

    /**
     * Permer de recuperer le nombre de page
     * @param condition
     * @param nbSeance
     * @return 
     */
    public int getNbPagesDB(String condition, int nbSeance) throws Exception;

    /**
     * Permet a un utilisateur de rejoindre une seance
     * @param id_seance
     * @param id_utilisateur
     * @return 
     */
    public int rejoindreSeanceDB(int id_seance, int id_utilisateur) throws Exception;

    /**
     * Permer a un utilisateur d encherir sur une seance
     * @param id_seance
     * @param id_utilisateur
     * @param prix
     * @return 
     */
    public int encherirDB(int id_seance, int id_utilisateur, double prix) throws Exception;

    /**
     * Permet a un utilisateur de quitter une seance
     * @param id_seance
     * @param id_utilisateur
     * @return 
     */
    public int quitterSeanceDB(int id_seance, int id_utilisateur) throws Exception;

    /**
     * Permet a un utilisateur de poster un message sur une seance
     * @param id_seance
     * @param id_utilisateur
     * @param message
     * @return 
     */
    public int posterMessageDB(int id_seance, int id_utilisateur, String message) throws Exception;

    /**
     * Retourne le meilleur encherisseur d'une seance
     * @param id_seance
     * @return 
     */
    public Utilisateur getMeilleurEncherisseurDB(int id_seance) throws Exception;

    /**
     * Permet de recuperer la meilleur enchere d une seance
     * @param id_seance
     * @return 
     */
    public double getMeilleurEnchereDB(int id_seance) throws Exception;

    /**
     * Permet de modifier l etat de la seance
     * @param id_seance
     * @param etat
     * @return 
     */
    public int changerEtatSeanceDB(int id_seance, int etat) throws Exception;

    /**
     * permet d ajouter un produit a une seance
     * @param produit
     * @return id du produit insere
     * @throws Exception 
     */
    public int ajouterProduitDB(Produit produit) throws Exception;

    /**
     * Retourne le produit correspondant a l id passe en parametre
     * @param idProduit
     * @return produit demande correspondant a l id
     * @throws Exception 
     */
    public Produit getProduitParId(int idProduit) throws Exception;

    /**
     * Permet d ajouter des images au produit de la seance
     * @param id_produit
     * @param images
     * @return 
     */
    public int ajouterImageProduitDB(int id_produit, List<Image> images) throws Exception;

    /**
     * Permet de recuperer un objet seance via l id passe en parametre
     * @param id_seance
     * @return
     * @throws Exception 
     */
    public Seance getSeanceById(int id_seance) throws Exception;

    /**
     * Permet de recuperer la collection d observer etant dans la seance
     * @param it_seance
     * @return 
     */
    public List<I_Observer> getListeObserverFromSeance(int id_seance) throws Exception;
    
    /**
     * Retourne un objet Categorie a partir de l id de celui ci
     * @param id_categorie
     * @return
     * @throws Exception 
     */
    public Categorie getCategorieById(int id_categorie) throws Exception;
    
    /**
     * Retourne la liste d images correspondant a l id du produit 
     * @param id_produit
     * @return
     * @throws Exception 
     */
    public List<Image> getImagesByIdProduit(int id_produit) throws Exception;
    
    /**
     * Teste si l utilisateur particpe la seance
     * @param id_seance
     * @param utilisateur
     * @return
     * @throws Exception 
     */
    public boolean participeASeance(int id_seance, int id_utilisateur) throws Exception;
    
    /**
     * Retourne la liste de toutes les categorie
     * @return
     * @throws Exception 
     */
    public List<Categorie> getAllCategorie() throws Exception;
}
